/**
 * 
 */

package com.wutianyi.queue;

import java.util.Collection;
import java.util.List;

/**
 * @author wutianyi
 * 
 */
public interface TaskQueue<T extends Task> {

	/**
	 * 往队列中增加元素
	 * 
	 * @param t
	 * @return 如果增加成功则返回true，否则返回false
	 */
	public boolean offer(T t);

	/**
	 * 移除对头元素
	 * 
	 * @return 如果没有则返回null
	 */
	public T poll();

	/**
	 * queue中的数量
	 * 
	 * @return
	 */
	public int size();

	/**
	 * 批量获取元素到collection中
	 * 
	 * @param c
	 * @param size
	 * @return 返回批量获取的个数
	 */
	public int drainTo(Collection<T> c, int size);

	/**
	 * 批量获取元素
	 * 
	 * @param size
	 *            指定的元素个数
	 * @return 如果没有task返回null
	 */
	public List<T> drainTo(int size);

	/**
	 * 批量插入任务
	 * 
	 * @param tasks
	 *            待插入的任务
	 */
	public void batchAddTask(List<T> tasks);

}
